package com.aterrizar.app;

import java.util.ArrayList;
import java.util.List;

import org.joda.time.DateTime;

import com.aterrizar.dominio.reservacion.asientos.Asiento;
import com.aterrizar.dominio.reservacion.asientos.categoria.CategoriaDeAsiento;
import com.aterrizar.dominio.reservacion.viajes.Tramo;
import com.aterrizar.dominio.reservacion.viajes.Vuelo;
import com.aterrizar.persistencia.servicios.AerolineaManager;
import com.aterrizar.persistencia.servicios.UsuarioManager;



public class Aplicacion {
	
	public static void main(String[] args) {
	
		//-------------------------------------------------------
		// Creamos aerolinea
		
		AerolineaManager am = new AerolineaManager();
		am.crearAerolinea("SomeTimes");
		
		//-------------------------------------------------------
		// Creamos un asuario
		
		UsuarioManager um = new UsuarioManager();
		um.crearUsuario("rf", "nadalputo", "Federer", "Rogelio", "rf@gmail.com",(new DateTime("1975-5-23")));
		um.crearUsuario("rogercito", "nadalputo", "Federer", "Rogelio", "rf@gmail.com",(new DateTime("1975-5-23")));
		
		//-------------------------------------------------------
		// Creamos un vuelo con un tramo y asientos
		
		List<Integer> idAsientos = new ArrayList<Integer>();
		idAsientos.add(1);
		idAsientos.add(3);
		idAsientos.add(4);

		
		Vuelo v = new Vuelo();
		
		
		Tramo t1 = new Tramo("Argentina", "Uruguay", new DateTime("2014-05-05"), new DateTime("2014-05-06"), (double) 1000,v);
		for(int c = 1; c!=20; c++) {
			t1.getAsientos().add(new Asiento(CategoriaDeAsiento.TURISTA, t1));
			
			if(c>11)
				t1.getAsientos().add(new Asiento(CategoriaDeAsiento.PRIMERA,t1));
		}
		
		
		List <Tramo> ts = new ArrayList<Tramo>();
		ts.add(t1);
		v.agregarTodosLosTramos(ts);
		
		//--------------------------------------------------------
		// Agregamos el vuelo a la aerolinea
		
		am.agregarVuelosAerolinea(am.consultarAerolinea(1).getId(), v);

		//--------------------------------------------------------
		// Agregamos un vuelo con dos tramos
		
		Vuelo v1 = new Vuelo();

		
		Tramo t2 = new Tramo("Uruguay", "Brasil", new DateTime("2014-05-06"), new DateTime("2014-05-07"), (double) 1000,v1);
		for(int c = 1; c!=20; c++) {
			t2.getAsientos().add(new Asiento(CategoriaDeAsiento.TURISTA, t2));
			
			if(c>11)
				t2.getAsientos().add(new Asiento(CategoriaDeAsiento.PRIMERA,t2));
		}
		

		Tramo t3 = new Tramo("Brasil", "Japon", new DateTime("2014-05-07"), new DateTime("2014-05-08"), (double) 1000, v1);
		for(int c = 1; c!=20; c++) {
			t3.getAsientos().add(new Asiento(CategoriaDeAsiento.TURISTA, t3));
			
			if(c>11)
				t3.getAsientos().add(new Asiento(CategoriaDeAsiento.PRIMERA,t3));
		}
		
		
		List <Tramo> ts1 = new ArrayList<Tramo>();
		ts1.add(t2);
		ts1.add(t3);
		v1.agregarTodosLosTramos(ts1);
		
		//--------------------------------------------------------
		// Agregamos el vuelo a la aerolinea
		
		am.agregarVuelosAerolinea(am.consultarAerolinea(1).getId(), v1);

		
		um.reservarVueloUsuario(1, idAsientos);
		
		
		
		
		//---------------------------------------------------------
		//UsuarioManager um = new UsuarioManager();
		//um.filtro(new FiltroVuelosConAerolineaNombre("SomeTimes"), um.consultarUsuario(1).getId());
		//um.filtro(new FiltroAsientosCategoria(CategoriaDeAsiento.PRIMERA), um.consultarUsuario(1).getId());
		
	}
}
